package com.petdog.common.dto;

import lombok.Data;
import java.util.List;

/**
 * 分页结果类
 * 用于封装分页查询的结果
 */
public class PageResult<T> {
    // 当前页码
    private int pageNum;
    // 每页数量
    private int pageSize;
    // 总条数
    private long total;
    // 总页数
    private int pages;
    // 当前页的数据列表
    private List<T> list;
    // 是否为第一页
    private boolean isFirstPage;
    // 是否为最后一页
    private boolean isLastPage;

    public int getPageNum() {
        return pageNum;
    }

    public void setPageNum(int pageNum) {
        this.pageNum = pageNum;
    }

    public int getPageSize() {
        return pageSize;
    }

    public void setPageSize(int pageSize) {
        this.pageSize = pageSize;
    }

    public long getTotal() {
        return total;
    }

    public void setTotal(long total) {
        this.total = total;
    }

    public int getPages() {
        return pages;
    }

    public void setPages(int pages) {
        this.pages = pages;
    }

    public List<T> getList() {
        return list;
    }

    public void setList(List<T> list) {
        this.list = list;
    }

    public boolean isFirstPage() {
        return isFirstPage;
    }

    public void setFirstPage(boolean firstPage) {
        isFirstPage = firstPage;
    }

    public boolean isLastPage() {
        return isLastPage;
    }

    public void setLastPage(boolean lastPage) {
        isLastPage = lastPage;
    }
    
    /**
     * 构造分页结果
     * @param list 当前页的数据列表
     * @param pageNum 当前页码
     * @param pageSize 每页数量
     * @param total 总条数
     */
    public PageResult(List<T> list, int pageNum, int pageSize, long total) {
        this.list = list;
        this.pageNum = pageNum;
        this.pageSize = pageSize;
        this.total = total;
        
        // 计算总页数
        this.pages = (int) Math.ceil((double) total / pageSize);
        
        // 判断是否为第一页和最后一页
        this.isFirstPage = pageNum == 1;
        this.isLastPage = pageNum >= this.pages || this.pages == 0;
    }
    
    /**
     * 快速创建空分页结果
     * @param pageNum 当前页码
     * @param pageSize 每页数量
     * @return 空分页结果
     */
    public static <T> PageResult<T> empty(int pageNum, int pageSize) {
        return new PageResult<>(List.of(), pageNum, pageSize, 0);
    }
}
